home *** CD-ROM | disk | FTP | other *** search
/ Macintosh Technology Seed 1996 September / Macintosh Technology Seed (September 1996) (CDRM1437020).ISO / pc / qd3d15d6 / 15d6_sdk.exe / QD3D Win32 1.5d6 / readme.txt < prev   
Text File  |  1996-08-26  |  18KB  |  289 lines

  1.  
  2.  
  3. QuickDraw 3Dô 1.5d6 DR - Win32 Platform Preliminary Developers' Release 
  4.  
  5.  
  6. Preliminary Release Notes - August 26, 1996
  7.  
  8. This special release includes preliminary optimized and debug builds of QuickDraw 3D for Win32. Since this is a preliminary release it may not represent the type of performance you can expect in the final release. 
  9.  
  10. This is a preliminary development release. It is intended for evaluation purposes only. No part of this release may be redistributed without permission from Apple Computer. 
  11.  
  12. Welcome to QuickDraw 3D!  
  13.  
  14. QuickDraw 3D is a platform independent 3D graphics library developed by Apple Computer.  Enclosed, you will find the 1.5d6 DR release of QuickDraw 3D for Win32. Note: QuickDraw 3D 1.5d6 for Win32 is equivalent to 1.5d7 on Mac OS.
  15.  
  16. QuickDraw 3D goes beyond providing 3D graphics, it provides an integrated solution both for the end user and for developers.  QuickDraw 3D encompasses a standard file format (3DMF), acceleration layer, input architecture, high level geometries, and extensibility.
  17.  
  18. QuickDraw 3D is a library for PowerPCô based computers running the MacOS and Pentiumô based computers running Windows 95ô or Windows NTô 3.51 and 4.0.  The API is in C, with support for development using C++.  QuickDraw 3D allows for immediate mode and retained rendering.  The API is object based and provides a large number of geometry types.  The file format accommodates both text and binary modes, with encoding for endianess so that files can be transported to other platforms and across the Internet. 3DMF parser code for several different platforms is available from our Web page at http://quickdraw3d.apple.com.
  19.  
  20. QuickDraw 3D for Win32 System Requirements
  21. Pentium processor
  22. Windows 95 or Windows NT (3.51 or 4.0b2)
  23. A video board providing 256 color (8-bit) at 640x480 resolution. High Color (16-bit) or True Color (24-bit or 32-bit) video highly recommended.
  24.  
  25. Development System Requirements
  26. Microsoft Visual C++ 4.x
  27. MSVCR40D.DLL - the debug version of C runtime DLL which is included with Visual C++ 4.x
  28.  
  29. Using this QuickDraw 3D Win32 Preliminary Developer Release
  30. There are two different builds of QuickDraw 3D for Win32. An optimized build and a debug build. These are located in the \Lib and \Lib\Debug directories respectively. This preliminary developer release of QuickDraw 3Dcurrently has no installer.
  31.  
  32. Make sure you clear out any old versions of QuickDraw 3D including QD3D.DLL, QD3D_D.DLL, RAVE.DLL, RAVE_D.DLL, QD3D_IR.Q3X, QD3D_IR_D.Q3X, QD3D_IR2.Q3X, and QD3D_IR2_D.Q3X. 
  33. Copy the contents of the QuickDraw 3D preliminary Win32 release to your hard drive.
  34. Set you Lib and Include paths to reference the QuickDraw 3D Lib and Lib\Debug directories and Interfaces directory respectively. (Under Visual C++ this can be done from the Tools|Options|Directories dialog panel.) 
  35. Set your system's Path to reference the QuickDraw 3D Lib and Lib\Debug directories where the QuickDraw 3D DLLs are located. 
  36. Note: QuickDraw 3D loads plug-ins such as the Interactive Renderer from the same directory as the QuickDraw 3D library so it is important that you have QD3D_IR2.q3x in the same directory as QD3D.dll or QD3D_IR2_D.q3x in the same directory as QD3D_D.dll. You can copy either the optimized or debug DLLs to your Windows\System folder (Win95) or Windows\System32 directory (NT), but you must take care that you do not mix debug and optimized versions.
  37.  
  38. Lib, Include and Path can be also be set using environment variables (in Autoexec.bat on Win95 or in the System control panel on NT).
  39. example: 
  40.    Set LIB = %LIB%;c:\QD3D\LIB
  41.    Set INCLUDE = %INCLUDE%;c:\QD3D\Interfaces
  42.    Set PATH = %Path%;c:\QD3D\LIB;c:\QD3D\LIB\Debug
  43.  
  44. Feature Differences for Win32 Version of QuickDraw 3D
  45. Pixmap Draw Context Only
  46. Only the pixmap draw context is supported in this developer release of the QuickDraw 3D. The implication of this is that your application will be responsible for blitting the draw context to the screen. See "Implementing Double Buffering Using Pixmap Draw Context and GDI" below.
  47.  
  48. A Win32 specific draw context will be fully supported in a forthcoming developer release.
  49.  
  50. The QuickDraw 3D Pointing Device Manager
  51. The QuickDraw 3D Pointing Device Manager API is not supported in the Win32 version of QuickDraw 3D.
  52.  
  53. Fixed Problems and Changes
  54.  
  55. Release d7 and d6
  56. The d6 Windows 95/NT release is identical to the d7 release for MacOS.   MacOS d6 was linked against the wrong library and was rebuilt as d7.
  57. Also, d6 has a new version of the Interactive Renderer (QD3D_IR2.Q3X) with more loops optimized and bug fixes.
  58.  
  59. QuickDraw 3D
  60. #1212783 DrawContext mask is relative to window origin and not drawing origin
  61. #1212783 Fixed incorrect origin for Mask in draw context.
  62. #1236379 Clearing respects mask
  63. #1251484 Q3DrawContext_SetMask should allow null mask if maskstate is false
  64. #1350972 win32Storage bug in iWin32Storage_Read
  65. #1359648 Low mem crash in Q3Geometry_Submit
  66. #1359972 Low mem - Q3Cone_New
  67. #1359981 fix low mem error - Q3Cylinder_New
  68. #1359991 fix low mem error - Q3Disk_New
  69. #1360014 fix low mem error - Q3Ellipse_New
  70. #1360018 fix low mem error - Q3Torus_New
  71. #1364919 texture animation bug
  72. #1366944 fix up failure cases in Interactive Renderer
  73. #1367341 Immediate mode submission of attributes was not working.
  74. #1368155 When Interactive Renderer does not load, we need to be more cautious as far as Q3InteractiveRenderer calls go.
  75. #1369187 highlighting and texturing bug
  76. #1372185 Problem when Engine creation fails in RAVE
  77. #1372296 fix memory leak (#1372296)
  78. #1372443 - The code that copies the Trimesh info was not checking for NULL edge and was therefore getting garbage.
  79. #1373437 Mask not working correctly for draw contexts
  80. #1373747 MacDrawContext blitting wrong with double-buffered, paned, monitor-crossing wind
  81. #1374058: Added shadingUV attributes to output triangles (normalized from 0-1)
  82. #1374260 Bug in TriGrid to Trimesh conversion
  83. #1374892 - Light groups need a copy method, which does nothing, so that Object_Duplicate works for them.  This should be inheriting from Group, so the bug remains open.  This is just a workaround.
  84. #1374895 - Save the context when QuickDraw 3D gets initialized and use it to force CFM to load extension in the same heap.  This fixes a problem with Component Manager/QT 2.5.
  85. #1374896 - When re-registering an attribute, we should post a warning, not an error.  Added more Errors/Warnings to make it easier for developers to determine what went wrong.
  86. #1379429 - Added SurfaceShader as mask type and to maskAll for attributeSet mask.
  87. #1379429 - The mask would be updated even when the addition of attributes failed.  Now we check for the value first.
  88. #1379838 - fix typo.
  89. #1380044 Pixmap draw Context handles double buffering setting
  90.  
  91. Release d5
  92. Not released
  93.  
  94. Release d4
  95. QuickDraw 3D
  96. #1369547 Internally the Viewer wasn't re-setting the camera button
  97. #1369287 No drag in Viewer means no drag, disabled option key for drag
  98. #1368149 Extension loading mechanism looks for extensions in the same place as the where the library is loaded from
  99. #1369361 Orthographic camera had bad validation code in the debug case, firing assertion
  100. #1368895: In  Q3Pick_GetPickDetailData return default initialization values when pick detail data isn't present. 
  101. #1368661: In  Q3Pick_GetPickDetailData return NULL for rootGroup, NULL for postions, 0 for depth when this pick detail data isn't present. 
  102. #1354659 - NURB patches were crashing
  103. Improve small trimesh performance 
  104. #1368158: Fix MP support
  105.  
  106. RAVE
  107. Fix logic-physical translation
  108. Add ability to initialize cache context with self
  109.  
  110. Release d2
  111. QuickDraw 3D
  112. #1360746 made 1.5b2 compatible with QT2.5
  113. Exported missing I/O functions
  114. #1367881 - Aliases were being resolved before it was determined that the file was a QuickDraw 3D extension.
  115. #1366467 - The ObjectSubclass routine was being too picky on the object type.  It was generating an error when asking about the subtype of the parent class. For example, Q3DisplayGroup_GetType on a DisplayGroup would fail (and this worked on 1.0.x).
  116. #1355057 - When the window was totally occluded, the DrawRegion was NULL and the code was not checking for that.
  117. Wireframe was not using the DrawRegions properly
  118. #1367858 - Hot angle for Spot Lights was not being set 
  119. edge data for trimesh is now honored.
  120.  
  121. RAVE
  122. Handling cache initializing with itself is done correctly.
  123.  
  124. Known Problems in d7
  125. The release build of the library for Windows (in "Lib" folder) is currently unstable do to a known bug in the renderer. We actively working to address this problem. The debug build (in "Lib\Debug") is much more solid.
  126. Windows specific DrawContext are not in yet.  Use pixmap workaround for now. (see "Implementing Double Buffering..." below) 
  127. On a memory protected OS you will access violations when using custom attributes/elements.  (Fixed for next build)
  128. 8-bit has a set up time per window and may appear slow if opening and disposing of the window happens in quick succession.
  129.  
  130. Implementing Double Buffering Using Pixmap Draw Context and GDI
  131. QuickDraw 3D applications using this developer release must use the generic pixmap draw context. A native Win32 draw context will be fully supported in a future developer release.
  132.  
  133. The basic method for managing a pixmap draw context is demonstrated in the enclosed QD3DSample application project. It consists of two main steps: Creating a new draw context for a view and rendering.
  134.  
  135. Creating a draw context for a view:
  136. Create a memory device context compatible with the view window's DC and store a reference to it.
  137.     hdc = GetDC(theDocument->fWindow);
  138.     theDocument->fMemoryDC = CreateCompatibleDC(hdc);
  139.  
  140. Create an 16 or 32 bit device independent bitmap (DIB) and select it into the memory device context.
  141.     bitmapInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);    
  142.     bitmapInfo.bmiHeader.biWidth = theDocument->fWidth;    
  143.     bitmapInfo.bmiHeader.biHeight = -theDocument->fHeight; // note: negative for top-down DIB    
  144.     bitmapInfo.bmiHeader.biPlanes = 1;
  145.     if ( GetDeviceCaps(hdc, BITSPIXEL) == 32 )
  146.         bitmapInfo.bmiHeader.biBitCount = 32;
  147.     else
  148.         bitmapInfo.bmiHeader.biBitCount = 16;    
  149.     bitmapInfo.bmiHeader.biCompression = BI_RGB;    
  150.     bitmapInfo.bmiHeader.biSizeImage = 0;    
  151.     bitmapInfo.bmiHeader.biXPelsPerMeter = 0;    
  152.     bitmapInfo.bmiHeader.biYPelsPerMeter = 0;    
  153.     bitmapInfo.bmiHeader.biClrUsed = 0;    
  154.     bitmapInfo.bmiHeader.biClrImportant = 0;    
  155.     theDocument->fBitmap = CreateDIBSection(hdc, &bitmapInfo, DIB_RGB_COLORS,    
  156.         &theDocument->fBitStorage, NULL, 0);    
  157.     SelectObject(theDocument->fMemoryDC, theDocument->fBitmap);
  158.  
  159. Create a new pixmap draw context which is parametrized to match the DIB. Set the pixmap draw context's image data pointer to the DIB's bitmap data. The draw context's doubleBufferState flag should be false.
  160.     myDrawContextData.clearImageMethod = kQ3ClearMethodWithColor;
  161.     myDrawContextData.clearImageColor = ClearColor;
  162.     myDrawContextData.paneState = kQ3False;
  163.     myDrawContextData.maskState = kQ3False;
  164.     myDrawContextData.doubleBufferState = kQ3False; // the app is doing the double buffering
  165.         /* create a TQ3Pixmap */
  166.     aPixmap.width = theDocument->fWidth;
  167.     aPixmap.height = theDocument->fHeight;
  168.     aPixmap.image = theDocument->fBitStorage;  //fBitStorage is bitmap data from the DIB
  169.     if (bitmapInfo.bmiHeader.biBitCount == 32)
  170.     {
  171.         aPixmap.rowBytes = aPixmap.width * 4;
  172.         aPixmap.pixelSize = 32;
  173.         aPixmap.pixelType = kQ3PixelTypeRGB32;
  174.     }
  175.     else
  176.     {
  177.         aPixmap.rowBytes = (aPixmap.width * 
  178.             (bitmapInfo.bmiHeader.biBitCount/8));
  179.         aPixmap.rowBytes = (aPixmap.rowBytes + 3) & ~3L; // make it long aligned
  180.         aPixmap.pixelSize = 16;
  181.         aPixmap.pixelType = kQ3PixelTypeRGB16;
  182.     }
  183.     aPixmap.bitOrder = kQ3EndianBig;   /* currently must be set to big endian - even on Intel Win32 */
  184.     aPixmap.byteOrder = kQ3EndianBig;  /* currently must be set to big endian - even on Intel Win32 */
  185.         /* set up the pixmap draw context */
  186.     myPixmapDrawContextData.pixmap = aPixmap;
  187.     myPixmapDrawContextData.drawContextData = myDrawContextData;
  188.     myDrawContext = Q3PixmapDrawContext_New(&myPixmapDrawContextData);
  189.  
  190. Set the pixmap draw context as the draw context for the view and dispose of the draw context.
  191.     Q3View_SetDrawContext(myView, myDrawContext);
  192.     Q3Object_Dispose( myDrawContext );
  193.  
  194. Be sure to set the renderer associated with your view to use double buffer bypass. (Remember your application is performing the double buffering).
  195.     myRenderer = Q3Renderer_NewFromType(kQ3RendererTypeInteractive;
  196.     Q3View_SetRenderer(myView, myRenderer;
  197.     Q3InteractiveRenderer_SetDoubleBufferBypass( myRenderer, kQ3True);
  198.     Q3InteractiveRenderer_SetPreferences(myRenderer, kQAVendor_BestChoice, 0);
  199.  
  200. Rendering (typically in response to WM_PAINT)
  201. Do your rendering loop.
  202.     hdc = GetDC(theDocument->fWindow);
  203.     Q3View_StartRendering(theDocument->fView );    
  204.     do {    
  205.         Q3Shader_Submit( theDocument->fIllumination, theDocument->fView );    
  206.         Q3Style_Submit( theDocument->fInterpolation, theDocument->fView );    
  207.         Q3Style_Submit( theDocument->fBackFacing, theDocument->fView );    
  208.         Q3Style_Submit( theDocument->fFillStyle, theDocument->fView );    
  209.         Q3MatrixTransform_Submit( &theDocument->fRotation, theDocument->fView );    
  210.         Q3DisplayGroup_Submit( theDocument->fModel, theDocument->fView );    
  211.     } while (Q3View_EndRendering(theDocument->fView) == kQ3ViewStatusRetraverse );    
  212.  
  213. Copy the data from the memory DC to the window using BitBlt.
  214.     BitBlt(hdc, 0, 0, theDocument->fWidth, theDocument->fHeight,    
  215.             theDocument->fMemoryDC, 0, 0, SRCCOPY);                    
  216.     ReleaseDC(theDocument->fWindow, hdc);                
  217.  
  218. Library Linking Issues
  219. This preliminary developer release includes debugging and optimized versions of the QuickDraw 3D DLLs. The debugging library requires MSVCR40D.DLL - the debug version of the Visual C++ 4.x C-runtime library DLL. 
  220.  
  221. About QuickDraw 3D for Win32's MSVC shared runtime library dependency.
  222. QuickDraw 3D has dependencies on the ANSI C-runtime library.  In fact some QuickDraw 3D APIs pass C-runtime library data structures as parameters (e.g. Q3UnixStorage_New()).  In order for these APIs to work properly the Win32 version of QuickDraw 3D is linked with the DLL version of the C-runtime library. 
  223.  
  224. The release (optimized) build of QuickDraw 3D requires and is distributed with the non-debug, multithreaded DLL version of Microsoft's Visual C++ 4.z C-runtime library (MSVCRT40.DLL). It is our feeling that this library is the most popular and best supported version of the C-runtime libraries. (There is complete source for this library included with Visual C++.) Unfortunately we are not allowed to distribute the debug build of the MSVC C-runtime library DLL (MSVCR40D.DLL).  You must have a license to Microsoft Visual C++ 4.x to obtain the debug DLL. 
  225.  
  226. See also: Microsoft Knowledge Base Article Q94248 "Using the C Run-Time" and Visual C++ User's Guide - (Setting Compiler Options:Code Generation) "Use Run-Time Libarary".
  227.  
  228. What's In This Release?
  229. In the Lib\Debug folder (the debug version of QuickDraw 3D)
  230.  QD3D_D.DLL - the debug version of the QuickDraw 3D 1.5 core library,
  231.         dependencies: MSVCR40D.DLL, QD3D_IR2_D.q3x and RAVE_D.DLL
  232.  QD3D_D.LIB - the import library for QD3D_D.DLL
  233.  
  234.  QD3D_IR2_D.q3x - a preliminary debug build of QuickDraw 3D Interactive Renderer plug-in version 1.5
  235.  
  236.  RAVE_D.DLL - a preliminary debug build of QuickDraw 3D Accelleration library version 1.5
  237.  RAVE_D.LIB - the import library for RAVE_D.DLL 
  238.  
  239.  3DViewer_d.DLL - a preliminary debug build of the 3D Viewer for Windows
  240.         dependencies: QD3D_D.DLL, MSVCR40D.DLL, QD3D_IR2_D.q3x, RAVE_D.DLL
  241.  3DViewer_d.LIB - the import library for 3DViewer_d.DLL 
  242.  
  243.  
  244. In the Lib folder (the optimized version of QuickDraw 3D)
  245.  QD3D.DLL - the optimized version of the QuickDraw 3D 1.5 core library,
  246.         dependencies: MSVCRT40.DLL, RAVE.DLL, QD3D_IR2.q3x
  247.  QD3D.LIB - the import library for QD3D.DLL
  248.  
  249.  MSVCRT40.DLL - the releae C-Runtime library DLL (from Visual C++ 4.x)
  250.  
  251.  QD3D_IR2.q3x - a preliminary optimized build of QuickDraw 3D Interactive Renderer plug-in version 1.5
  252.  
  253.  RAVE.DLL - a preliminary optimized build of QuickDraw 3D Accelleration library version 1.5
  254.  RAVE.LIB - the import library for RAVE.DLL 
  255.  
  256.  3DViewer.DLL - a preliminary optimized build of the 3D Viewer for Windows
  257.         dependencies: QD3D.DLL, MSVCRT40.DLL, RAVE.DLL, QD3D_IR2.q3x
  258.  3DViewer.LIB - the import library for 3DViewer.DLL 
  259.  
  260. In the Interfaces folder
  261.   The public interfaces for QD3D.DLL and 3DViewer.DLL 
  262.  
  263. In the Samples folder
  264.   QD3DSample - a simple application which demonstrates using the QuickDraw 3D core library to load and display 3D data. This sample implements double buffering using a pixmap draw context as described above.
  265.  
  266.   ViewerSample - a simple example of using the QuickDraw 3D Viewer Controller in a Win32 application.
  267.  
  268. Documentation
  269. The "Documentation" subdirectory of this release includes Adobe Acrobat PDF versions of the QuickDraw 3D reference "3D Graphics Programming With QuickDraw 3D", the preliminary "3D Metafile Reference" as well as two introductory articles from Apple technical journal develop. Even though the develop articles discuss using QuickDraw 3D with the MacOS most of the material contained therein is equally applicable to the Win32 version of QuickDraw 3D. 
  270.  
  271. The Adobe Acrobat Reader for Windows is included in the "Documentation" directory.
  272.  
  273. "3D Graphics Programming With QuickDraw 3D" is available from Addison-Wesley Publishing Company. ISBN 0-201-48926-0
  274.  
  275. Redistribution
  276. No part of this Preliminary Developer Release may be redistributed at this time.
  277.  
  278. Feedback
  279. Please send bug reports to revans@apple.com. In the event that you have to report a problem please be sure to specify that you are using this 1.5d6 preliminary Win32 developer release and be sure to include a complete description of your PC system configuration including video board and video driver configuration.
  280.  
  281. Send your comments and feedback on this release to hopwood@apple.com. 
  282.  
  283. Apple Computer's 3D technologies evangelist, Shawn Hopwood (hopwood@apple.com) is eager to work with developers.  Contact Shawn with details of your product.
  284.  
  285. Thanks for choosing QuickDraw 3D, and good luck with your development efforts!!
  286.  
  287. The QuickDraw 3D team.
  288.  
  289.